package com.fiap.solutions.entity;

import java.io.Serializable;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;

import com.fiap.solutions.Enum.TipoPessoa;


@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@SequenceGenerator(name="CLIENTE_ORACLE", sequenceName="SEQ_CLIENTE", allocationSize=1)
public class Cliente implements Serializable{
	private static final long serialVersionUID = -8236284850146004879L;

	public Cliente(int codigo, String nome, List<Pedido> pedidos,
			TipoPessoa tipoPessoa, String telefoneFixo, String telefoneCelular,
			String email) {
		super();
		this.codigo = codigo;
		this.nome = nome;
		this.pedidos = pedidos;
		this.tipoPessoa = tipoPessoa;
		this.telefoneFixo = telefoneFixo;
		this.telefoneCelular = telefoneCelular;
		this.email = email;
	}
	
	public Cliente(){}

	@Id
	@GeneratedValue(generator="CLIENTE_ORACLE", strategy=GenerationType.SEQUENCE)
	private int codigo;

	@Column(nullable=false)
	private String nome;
	
	@OneToMany(targetEntity = Pedido.class, fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy="cliente")
	private List<Pedido> pedidos;
	
	@Enumerated
	private TipoPessoa tipoPessoa;
	
	@Column(nullable=false)
	private String telefoneFixo;
	
	@Column(nullable=false)
	private String telefoneCelular;
	
	public int getCodigo() {
		return codigo;
	}

	public void setCodigo(int codigo) {
		this.codigo = codigo;
	}

	public List<Pedido> getPedidos() {
		return pedidos;
	}

	public void setPedidos(List<Pedido> pedidos) {
		this.pedidos = pedidos;
	}

	public String getTelefoneFixo() {
		return telefoneFixo;
	}

	public void setTelefoneFixo(String telefoneFixo) {
		this.telefoneFixo = telefoneFixo;
	}

	public String getTelefoneCelular() {
		return telefoneCelular;
	}

	public void setTelefoneCelular(String telefoneCelular) {
		this.telefoneCelular = telefoneCelular;
	}

	public String getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getNome() {
		return nome;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public TipoPessoa getTipoPessoa() {
		return tipoPessoa;
	}

	public void setTipoPessoa(TipoPessoa tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
	}

	@Column(nullable=false)
	private String email;
}
